<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if(!class_exists('CI_Model')) { class CI_Model extends Model {} }

class Users_rights_model extends CI_Model {
	public function get_all_modules() {
		$map = directory_map(APPPATH.'controllers/admin/', true);
		foreach ($map as $m) {
			if ($m != "home.php") $return[] = $m;
		}
		return $return;
	}

	public function get_all_list() {
		$list = $this->get_all_modules();
		foreach ($list as $page) {
			include_once(APPPATH.'controllers/admin/'.$page);
			$page = str_replace(".php", "", $page);
			$info = get_class_methods(ucwords($page));
			$cl_name = strtolower($page);
			asort($info);
			foreach ($info as $func) {
				if ($func != "__construct" && $func != "get_instance") {
					$return[$cl_name][] = $func;
				}
			}
		}
		return $return;
	}
	public function check_rights($class, $method, $return = false) {
		if ($this->agent->browser() == "Opera") redirect('admin/home/opera');
		$id = $this->ion_auth->get_user()->group_id;
		$rights = $this->db->select()->from('rights')->where('right_group', $id)->where('right_block', $class)->get()->row_array();
		if (sizeof($rights) > 0) {
			$allowed = json_decode($rights['right_functions'], true);
			if ($rights['right_all'] == 1) {
				return true;
			} else {
				if (!array_key_exists($method, $allowed)) {
					$this->session->set_flashdata('error', 'Доступ запрещен, не верный ключ');
					if ($method != "index") {
						if ($return == false) {
							$this->session->set_flashdata('error', 'Доступ запрещен, нулевые права');
							redirect('admin/'.$class);
						} else
							return false;
					} else {
						if ($return == false) {
							$this->session->set_flashdata('error', 'Доступ запрещен, нулевые права');
							redirect('admin');
						} else
							return false;
					}
				} else {
					if ($allowed[$method] != 1) {
						if ($method != "index") {
							if ($return == false) {
								$this->session->set_flashdata('error', 'Доступ запрещен, нулевые права');
								redirect('admin/'.$class);
							} else
								return false;
						} else {
							if ($return == false) {
								$this->session->set_flashdata('error', 'Доступ запрещен, нулевые права');
								redirect('admin');
							} else
								return false;
						}
					} else {
						return true;
					}
				}
			}
		} else {
			$this->session->set_flashdata('error', 'Доступ запрещен, нет необходимого уровня доступа');
			redirect('admin');
		}
	}
}
?>